#include <stdio.h>
#define MAXSIZE 10
//用数组来实现一个队列结构
typedef int ElementType;
typedef struct queue{
    //数据项
    ElementType data[MAXSIZE];
    //地址项
    //两个变量，分别指向数组的首位和末尾（最后元素的后一个位置）
    int front;//指向队首
    int rear;//指向队尾 tail
} SeqQueue;
//2.实现算法
//2.1创建空队列
/*
 * 函数名：createQueue
 * 输入:无
 * 输出/返回值：返回队列 类型SeqQueue
 * */
SeqQueue createQueue(){
    //1.创建空队列
    SeqQueue queue;
    //2.给队列的参数赋初始值
    queue.front=-1;
    queue.rear=-1;
    return queue;
}
//2.2插入（从尾部进行插入）
/*
 * 函数名：EnQueue()/insert
 * 输入：被插入的数据结构 队列  被插入的元素 data
 * 输出：返回插入是否成功  int
 *
 * */
int EnQueue(SeqQueue *queue,ElementType data){
    //1.插入的队列已满
    if(queue->rear==MAXSIZE){
        printf("队列已经满，无法插入\n");
        return 0;
    }
    //2.队列为空
    if(queue->front==queue->rear){
        queue->rear=0;
        queue->data[queue->rear]=data;//赋值
        queue->rear++;//移动
        queue->front=0;
        return 1;
    }
    queue->data[queue->rear]=data;//赋值
    queue->rear++;//移动

  //  queue->data[queue->rear++]=data;//赋值

    return  1;
    //核心操作  先赋值  再移动
}
//2.3删除（从首部删除）
/*
 *
 * 函数名：DeQueue
 * 输入：被删除的队列
 * 输出：被删除的元素
 * */
ElementType DeQueue(SeqQueue *queue){
    //1.队列为空
    if(queue->front==queue->rear){
        printf("队列为空，删除操作无法进行\n");
        return 0;//0代表删除不成功
    }
    //2.队列不为空
    ElementType data= queue->data[queue->front];
    //核心操作 front++
    queue->front++;
    return data;//被删除队首的元素
}

int main() {
    //创建空队列
    SeqQueue  queue = createQueue();
    //插入
    ElementType data;
    for (int i = 0; i < 5; ++i) {
        scanf("%d",&data);
        EnQueue(&queue,data);

    }
    //删除
    DeQueue(&queue);
    DeQueue(&queue);

    //printf("Hello, World!\n");
    return 0;
}
